import { sequelize } from '../config/database.js';

// 导入所有模型
import Domain from './Domain.js';
import Expert from './Expert.js';
import User from './User.js';
import UserQuota from './UserQuota.js';
import Order from './Order.js';
import Question from './Question.js';
import RedeemCode from './RedeemCode.js';
import Admin from './Admin.js';
import UserLog from './UserLog.js';
import ServiceIntegration from './ServiceIntegration.js';
import Task from './Task.js';

// 定义模型关联关系
function setupAssociations() {
  // 领域和专家的关系 (一对多)
  Domain.hasMany(Expert, { 
    foreignKey: 'domain_id', 
    as: 'experts',
    onDelete: 'RESTRICT' // 有专家时不允许删除领域
  });
  Expert.belongsTo(Domain, { 
    foreignKey: 'domain_id', 
    as: 'domain' 
  });

  // 用户和用户额度的关系 (一对多)
  User.hasMany(UserQuota, { 
    foreignKey: 'user_id', 
    as: 'quotas' 
  });
  UserQuota.belongsTo(User, { 
    foreignKey: 'user_id', 
    as: 'user' 
  });

  // 用户额度和领域的关系 (多对一，可选)
  UserQuota.belongsTo(Domain, { 
    foreignKey: 'target_id', 
    as: 'domain',
    constraints: false
  });

  // 用户额度和专家的关系 (多对一，可选)
  UserQuota.belongsTo(Expert, { 
    foreignKey: 'target_id', 
    as: 'expert',
    constraints: false
  });

  // 用户和订单的关系 (一对多)
  User.hasMany(Order, { 
    foreignKey: 'user_id', 
    as: 'orders' 
  });
  Order.belongsTo(User, { 
    foreignKey: 'user_id', 
    as: 'user' 
  });

  // 订单和领域的关系 (多对一，可选)
  Order.belongsTo(Domain, { 
    foreignKey: 'target_id', 
    as: 'domain',
    constraints: false
  });

  // 订单和专家的关系 (多对一，可选)
  Order.belongsTo(Expert, { 
    foreignKey: 'target_id', 
    as: 'expert',
    constraints: false
  });

  // 用户和问答的关系 (一对多)
  User.hasMany(Question, { 
    foreignKey: 'user_id', 
    as: 'questions' 
  });
  Question.belongsTo(User, { 
    foreignKey: 'user_id', 
    as: 'user' 
  });

  // 专家和问答的关系 (一对多)
  Expert.hasMany(Question, { 
    foreignKey: 'expert_id', 
    as: 'questions' 
  });
  Question.belongsTo(Expert, { 
    foreignKey: 'expert_id', 
    as: 'expert' 
  });

  // 问答和用户额度的关系 (多对一)
  Question.belongsTo(UserQuota, { 
    foreignKey: 'user_quota_id', 
    as: 'quota' 
  });

  // 兑换码和领域的关系 (多对一，可选)
  RedeemCode.belongsTo(Domain, { 
    foreignKey: 'target_id', 
    as: 'domain',
    constraints: false
  });

  // 兑换码和专家的关系 (多对一，可选)
  RedeemCode.belongsTo(Expert, { 
    foreignKey: 'target_id', 
    as: 'expert',
    constraints: false
  });

  // 兑换码和创建人的关系 (多对一)
  RedeemCode.belongsTo(Admin, { 
    foreignKey: 'created_by', 
    as: 'creator' 
  });

  // 用户日志和用户的关系 (多对一)
  UserLog.belongsTo(User, {
    foreignKey: 'user_id',
    as: 'user'
  });

  // 任务和创建人的关系 (多对一)
  Task.belongsTo(Admin, {
    foreignKey: 'created_by',
    as: 'creator'
  });

  // 任务和更新人的关系 (多对一)
  Task.belongsTo(Admin, {
    foreignKey: 'updated_by',
    as: 'updater'
  });
}

// 初始化关联关系
setupAssociations();

// 导出所有模型和sequelize实例
export {
  sequelize,
  Domain,
  Expert,
  User,
  UserQuota,
  Order,
  Question,
  RedeemCode,
  Admin,
  UserLog,
  ServiceIntegration,
  Task
};

export default {
  sequelize,
  Domain,
  Expert,
  User,
  UserQuota,
  Order,
  Question,
  RedeemCode,
  Admin,
  UserLog,
  ServiceIntegration,
  Task
};
